1. Field of the Invention
The present invention generally relates to bidirectional buses and, more particularly, to a full-duplex bidirectional bus which allows two digital chips to transmit information simultaneously in both directions over a single bus.
2. Related Art
Most digital systems use some type of high-traffic path for data transmission. This high-traffic path is typically called a bus. The bus is often used as a common connection between a number of locations or switching points. Busses are used in microprocessors to speed the data flow and transfer data, and for addressing and control. Voltage levels and impedances at the bus interface allow rapid transmission and minimize effects due to noise. A number of units can typically share the bus without excessive loading.
Bus drivers are power devices designed to supply signals to all devices on the bus without signal degradation. Bus drivers can transfer data in either a half-duplex mode or a full-duplex mode. Busses that operate in a half-duplex mode transfer data in both directions, but only one direction at a time. Two-way radio was the first technology to use half-duplex, for example, while one party spoke, the other party listened. This can be contrasted with full-duplex radio mode which transmits and receives data simultaneously, similar to a telephone or personal communication network (PCN). In pure digital networks full-duplex is typically achieved using two pairs of wires. In analog networks or in digital networks using carriers, it is typically achieved by dividing the bandwidth of the line into two frequencies (i.e., one carrier for sending in one direction and a second carrier for sending in the other direction). The idea of using one wire to send data in two directions between two devices is very useful. Sending data in two directions is typically done using tri-state drivers tied together on a single bus. Using a typical bidirectional bus, control signals and information signals have to be coordinated. It is then possible to transfer signals across the bus without interfering with one another.
FIG. 1 shows a high level block diagram of a full-duplex bidirectional bus. This basic configuration comprises two drivers 110 and 115 and a bus 120. In operation, an input at A.sub.in shows up at A.sub.out. Likewise, an input at B.sub.in shows up at B.sub.out. Note that the two signals do not have to be coordinated in an way.
Tying the outputs of the two drivers 110, 115 together form what is commonly called a wire-AND or a wire-OR bus. If one or both drivers 110, 115 are on they pull the voltage of the bus 120 to zero. Thus, if it is known that one driver is off, and the bus voltage is high, then it can be deduced that the other driver is off. Similarly, if one driver is off and the bus voltage is low, then it can be deduced that the other driver is on. If, however, driver A 110 (for example) is on, it cannot be determined what driver B 115 is doing since the voltage on the bus is low if one or both drivers 110, 115 are on. In other words, conventional systems that transfer data over a bus in full-duplex mode determine the state of the drivers by examining the voltage on the bus 110 to determine whether it is in a high or low state (i.e., examined with respect to two voltage levels). Thus, if the state of the second driver could not be determined, the first driver would be held inactive to determine the state of the second driver.
One conventional technique for performing full-duplex on a high speed bus line is manufactured and sold by Motorola (Dual Simultaneous Bus Transceiver, part number MC10194). The Motorola transceiver determines the different states of the bus using three different voltage levels. The Motorola device is an emitter coupled logic (ECL) circuit. As such, the bus consists of a current source at each end, each of which can be turned on or off. When both sources are off, the bus voltage is pulled to ground. When exactly one source is on, the bus voltage is pulled to an intermediate voltage, and when they are both on the voltage is pulled to the lowest voltage. By distinguishing among these three voltages, a driver can determine what the other driver is doing. One problem with this technique is a loss of noise immunity that comes from trying to distinguish between three voltage levels, as opposed to only two voltage levels (as done in conventional wire-AND gate buses).
Thus, a system and method is required for allowing full-duplex operation between two devices (i.e., allowing transfer of information over a single wire simultaneously in both directions) that provides relative immunity to noise.